package com.bee.剑指offer;

/**
 * 汇编语言中有一种移位指令叫做循环左移（ROL），现在有个简单的任务，就是用字符串模拟这个指令的运算结果。
 * 对于一个给定的字符序列  S ，请你把其循环左移 K 位后的序列输出（保证 K 小于等于 S 的长度）。
 * 例如，字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果，即 “XYZdefabc” 。
 */
public class 左旋转字符串 {

    /**
     * 判断n是否小于str的长度
     */
    public static String LeftRotateString(String str, int n) {
        if (str.length() == 0) {
            return "";
        }
        if (n <= str.length()) {
            String n1 = str.substring(0, n);
            String n2 = str.substring(n, str.length());
            return n2 + n1;
        }
        int target = n % str.length();
        StringBuilder count = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            count.append(str.charAt((i + target) % str.length()));
        }
        return count.toString();
    }

    public static String LeftRotateString2(String str, int n) {
        if (str.length() == 0) {
            return "";
        }
        if (n <= str.length()) {
            String n1 = str.substring(0, n);
            String n2 = str.substring(n, str.length());
            return n2 + n1;
        }
        int target = n % str.length();
        String s1 = str.substring(0, target);
        String s2 = str.substring(target, str.length());
        return s2 + s1;
    }

    public static void main(String[] args) {
        String abcXYZdef = LeftRotateString("aab", 10);
        System.out.println(abcXYZdef);
        String str = "abcXYZdef";
        System.out.println(str.substring(0, 3));
        System.out.println(str.substring(3, str.length()));
    }
}
